package com.onesports.intelligent.k12.polarlight.mapper.course;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.onesports.intelligent.k12.polarlight.annotation.DataPermission;
import com.onesports.intelligent.k12.polarlight.domain.entity.course.CourseScheduleDetail;
import com.onesports.intelligent.k12.polarlight.domain.entity.course.CourseScheduleDetailCoachRel;
import com.onesports.intelligent.k12.polarlight.domain.vo.course.CourseScheduleDetailVO;
import com.onesports.intelligent.k12.polarlight.domain.vo.course.MyCourseSchedulePeriodVO;
import com.onesports.intelligent.k12.polarlight.domain.vo.course.SchedulePeriodDetailVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;

/**
 * 课表时段明细表
 *
 * @author
 * @since 1.0.0 2022-07-08
 */
@Mapper
public interface CourseScheduleDetailMapper extends BaseMapper<CourseScheduleDetail> {


    /**
     * 获取课表时段信息
     *
     * @param scheduleId 课表id
     * @param campusIds  校区ids
     * @param courseId   课程id
     * @param startDate  开始日期
     * @param endDate    结束日期
     * @param coachId    教练id
     * @return List<CourseScheduleDetailVO>
     */
    @DataPermission
    List<CourseScheduleDetailVO> schedulePreview(@Param("scheduleId") String scheduleId,
                                                 @Param("campusIds") List<String> campusIds,
                                                 @Param("courseId") String courseId,
                                                 @Param("startDate") String startDate,
                                                 @Param("endDate") String endDate,
                                                 @Param("coachId") String coachId);


    /**
     * 获取排课表详情
     *
     * @param scheduleId 课表id
     * @return List<CourseScheduleDetailVO>
     */
    List<CourseScheduleDetailVO> getScheduleDetail(@Param("scheduleId") String scheduleId);


    /**
     * 查询课表明细
     *
     * @param date        当前时间
     * @param scheduleId  课表Id
     * @param startPeriod 开始时间
     * @param endPeriod   结束时间
     * @return {@link CourseScheduleDetail}
     */
    CourseScheduleDetail getCourseScheduleDetail(@Param("date") String date, @Param("scheduleId") String scheduleId, @Param("startPeriod") String startPeriod, @Param("endPeriod") String endPeriod);

    /**
     * 获取课表信息--第一条数据
     *
     * @param scheduleId  课表Id
     * @param startPeriod 开始时间
     * @param endPeriod   结束时间
     * @return {@link List}<{@link CourseScheduleDetailCoachRel}>
     */
    List<CourseScheduleDetail> getScheduleDetailCoachList(@Param("scheduleId") String scheduleId, @Param("startPeriod") String startPeriod, @Param("endPeriod") String endPeriod);

    /**
     * 获取课表信息--list
     *
     * @param date        日期
     * @param scheduleId  课表Id
     * @param startPeriod 开始时间
     * @param endPeriod   结束时间
     * @return {@link List}<{@link CourseScheduleDetail}>
     */
    List<CourseScheduleDetail> getCourseScheduleDetailList(@Param("date") String date, @Param("scheduleId") String scheduleId, @Param("startPeriod") String startPeriod, @Param("endPeriod") String endPeriod);

    /**
     * 查询课程安排详细列表
     *
     * @param courseScheduleId 课表Id
     * @param nowDate          当前日期
     * @return {@link List}<{@link CourseScheduleDetail}>
     */
    List<CourseScheduleDetail> queryCourseScheduleDetailList(@Param("courseScheduleId") String courseScheduleId, @Param("nowDate") String nowDate);

    /**
     * 获取课表信息
     *
     * @param courseScheduleId 课表Id
     * @param nowDate          当前日期
     * @param startPeriod      开始时间
     * @param endPeriod        结束时间
     * @return {@link CourseScheduleDetail}
     */
    CourseScheduleDetail getScheduleDetailList(@Param("courseScheduleId") String courseScheduleId, @Param("nowDate") String nowDate, @Param("startPeriod") Date startPeriod, @Param("endPeriod") Date endPeriod);

    /**
     * 获取课表时段明细信息
     *
     * @return {@link List}<{@link SchedulePeriodDetailVO}>
     */
    List<SchedulePeriodDetailVO> getSchedulePeriodDetailList(@Param("scheduleId") String scheduleId, @Param("startPeriod") String startPeriod, @Param("endPeriod") String endPeriod);

    List<CourseScheduleDetail> getCourseScheduleDetails(@Param("scheduleId") String scheduleId, @Param("startTime") String startTime, @Param("endTime") String endTime);

    /**
     * function: 教练时段关联关系安排计算
     *
     * @param code        时段code
     * @param coachId     教练id
     * @param classStatus 班级状态
     * @return 关联数量
     * @author WangCX
     * @since 2022/8/9 15:22
     */
    Long countCoachLink(@Param("code") String code, @Param("coachId") String coachId,
                        @Param("classStatus") List<String> classStatus);

    /**
     * 获取大于等于课程日期 当前时段的课表详情
     *
     * @param scheduleDetail 课表详情
     * @return List<CourseScheduleDetail>
     */
    List<CourseScheduleDetail> geScheduleDetail(@Param("scheduleDetail") CourseScheduleDetail scheduleDetail);


    /**
     * 获取小于课程日期 当前时段的课表详情
     *
     * @param scheduleDetail 课表详情
     * @return List<CourseScheduleDetail>
     */
    List<CourseScheduleDetail> ltScheduleDetail(@Param("scheduleDetail") CourseScheduleDetail scheduleDetail);

    /**
     * 查询课程安排详细列表
     *
     * @param scheduleId 课表Id
     * @param startTime  开始时间
     * @param endTime    结束时间
     * @return {@link List}<{@link CourseScheduleDetail}>
     */
    List<CourseScheduleDetail> findCourseScheduleDetailList(@Param("scheduleId") String scheduleId, @Param("startTime") String startTime, @Param("endTime") String endTime);

    List<MyCourseSchedulePeriodVO> findCourseScheduleDetails(@Param("scheduleIds") List<String> scheduleIds, @Param("sectionCodes") List<String> sectionCodes);

    /**
     * 查询课程安排细节
     *
     * @param scheduleId  课表Id
     * @param sectionCode 节次
     * @param courseDate  课程日期
     * @return {@link List}<{@link CourseScheduleDetail}>
     */
    List<CourseScheduleDetail> queryCourseScheduleDetails(@Param("scheduleId")String scheduleId, @Param("sectionCode")String sectionCode, @Param("courseDate")String courseDate);
}
